package common

import (
	"fmt"
	"strings"
	"time"

	"gogs.xiaoyuanjijiehao.com/antlinker/antcms/internal/json"
)

// SchTime 搜索时间范围
type SchTime struct {
	Start JSONTime `json:"start,omitempty"`
	End   JSONTime `json:"end,omitempty"`
	Eq    JSONTime `json:"eq,omitempty"`
}

const (
	timeJSONFormat = "2006-01-02 15:04:05-07:00"
)

// JSONTime json时间序列化
type JSONTime time.Time

// MarshalJSON 实现它的json序列化方法
func (t JSONTime) MarshalJSON() ([]byte, error) {
	var stamp = fmt.Sprintf("\"%s\"", time.Time(t).Format(timeJSONFormat))
	return []byte(stamp), nil
}

// UnmarshalJSON 实现它的json反序列化方法
func (t *JSONTime) UnmarshalJSON(data []byte) (err error) {
	fmt.Println(string(data))
	var str string
	if err := json.Unmarshal(data, &str); err != nil {
		return err
	}
	var tmp time.Time

	if tmp, err = time.Parse(timeJSONFormat, str); err != nil {
		return err
	}
	*t = JSONTime(tmp)
	return nil
}

// IsZore 时间零值判断
func (t JSONTime) IsZore() bool {
	return time.Time(t).IsZero()
}

// ToTime 转换为时间类型
func (t JSONTime) ToTime() time.Time {
	return time.Time(t)
}

// ParseSchTime 搜索时间解析
func ParseSchTime(data string) (t *SchTime) {
	if !strings.HasPrefix(data, "{") {

		if tmp := parseTime(data); !time.Time(tmp).IsZero() {
			t = &SchTime{Eq: tmp}
		}
		return
	}
	t = &SchTime{}
	if err := json.Unmarshal([]byte(data), t); err != nil {
		fmt.Println(err)
		return nil
	}
	return
}
func parseTime(data string) JSONTime {
	t, err := time.Parse(timeJSONFormat, data)
	if err != nil {
		fmt.Println(err)
	}
	return JSONTime(t)
}
